/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"8616ED5F-A857-4A97-A5AB-D745B6D5F483",variableType:4}
 */
var fTipo = null;

/**
 * @type {Number}
 *
 * @properties={typeid:35,uuid:"60B833EC-6CF7-4FAD-BB9B-3D9F1840B6B7",variableType:4}
 */
var es_nro_manual = 0;

/**
 * @properties={typeid:24,uuid:"913D313A-7424-4D6E-A296-DCC49C3FDF38"}
 * @AllowToRunInFind
 */
function confirmar()
{
	esconderErrores()
	// VALIDACIONES	
	var $error = 0
	if (!cliente_id)
	{
		elements.lbl_error_cliente.visible = true
		$error = 1
	}
	else
	{
		totalizar();
		if (fac_cabecera_to_clientes.tipo_identificacion == 99)
		{
			if (total > globals.zparam_limite_factura_afip)
			{
				globals.DIALOGS.showWarningDialog('Aviso','El total excede al límite impuesto por AFIP a un anónimo. El límite es de ' + globals.zparam_limite_factura_afip,'OK')
				return false;
			}  
		}
		else
		{
			var $credito = 0
			if (fac_cabecera_to_clientes.credito_asignado)
				$credito = fac_cabecera_to_clientes.credito_asignado
			if ($credito != -1 && total > $credito && fac_cabecera_to_cond_pago.dias != 0)
			{
				globals.DIALOGS.showWarningDialog('Aviso','El total excede al crédito del cliente de ' + $credito,'OK')
				return false;
			} 
		}
	}
	if (!fecha)
	{
		elements.lbl_error_fecha.visible = true
		$error = 1
	}
	if (total <= 0)
	{
		elements.lbl_error_total.visible = true
		$error = 1
	}
	if (!cond_pago_id)
	{
		elements.lbl_error_cond_pago.visible = true
		$error = 1
	}
	if (es_nro_manual && !nro_factura)
	{
		elements.lbl_error_nro_factura.visible = true
		$error = 1
	}
	if (globals.zparam_usa_proyecto == 1 && proyecto_id == null)
	{
		elements.lbl_error_proyecto.visible = true
		$error = 1
	}
	
	// ELIMINAR RENGLONES en BLANCO
	var $origenes = [new Array(), new Array()]
	var i = 1;
	while (i <= fac_cabecera_to_fac_detalle.getSize())
	{
		var $rcd = fac_cabecera_to_fac_detalle.getRecord(i)
		$rcd.msj_error = ''
		if ($rcd.producto_id == null)
		{
			fac_cabecera_to_fac_detalle.deleteRecord(i);
		}
		else
		{
			if ($rcd.fac_detalle_to_productos.tipo_descripcion != 2)
			{
				if (!$rcd.cantidad_dec)
				{
					$rcd.msj_error = '-Cantidad '
					$error = 1
				}
				if (!$rcd.precio_unitario)
				{
					$rcd.msj_error += '-P Unit.'
					$error = 1
				}
				var $idx = $origenes[0].indexOf($rcd.fac_detalle_to_productos.origen)
				if ($idx == -1)
				{
					$origenes[0].push($rcd.fac_detalle_to_productos.origen)
					$origenes[1].push($rcd.total_renglon)
				}
				else
				{
					$origenes[1][$idx] += $rcd.total_renglon
				}
				$rcd.pendiente_entrega = $rcd.cantidad_dec
			}
			i++
		}
	}

	if ($error)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Por favor, complete todos los campos obligatorios','OK')
		return false
	}
	
	// GRABA DOMICILIO INGRESADO
	if (cli_domicilios_id == null)
	{   
		if (entrega_entre_calles==null && entrega_descripcion==null && entrega_localidad==null && entrega_lugar==null &&	entrega_observaciones==null &&  entrega_provincia_id==null && entrega_telefono==null )
		{ // no lleno domicilio
			if (retira == 0) //si no retira hay que entregarlo en alguna direccion
		 	{
				var resp = globals.DIALOGS.showQuestionDialog('Generador de Facturas y Notas', "El cliente no retira, ¿Informa Domicilio de Entrega ?", "Si" , "No");
				if (resp == "Si")
				{
					elements.tabs_20.tabIndex = 2;
					return false; 
				}
			}
		}
		else
		{ // graba
			if ( entrega_entre_calles && entrega_localidad && entrega_provincia_id && entrega_telefono && entrega_lugar)
			{
				fac_cabecera_to_clientes.clientes_to_cli_domicilios.newRecord();
				fac_cabecera_to_clientes.clientes_to_cli_domicilios.descripcion		= entrega_descripcion
				fac_cabecera_to_clientes.clientes_to_cli_domicilios.entre_calles	= entrega_entre_calles;
				fac_cabecera_to_clientes.clientes_to_cli_domicilios.localidad		= entrega_localidad;
				fac_cabecera_to_clientes.clientes_to_cli_domicilios.calle			= entrega_lugar;
				fac_cabecera_to_clientes.clientes_to_cli_domicilios.provincia_id	= entrega_provincia_id;
				fac_cabecera_to_clientes.clientes_to_cli_domicilios.telefonos		= entrega_telefono;
				fac_cabecera_to_clientes.clientes_to_cli_domicilios.observaciones	= entrega_observaciones;
			}
			else
			{
				globals.DIALOGS.showWarningDialog('Aviso','Por favor complete la dirección de entrega','OK')
				elements.tabs_20.tabIndex = 2;
				return false
			}
		}
	}
	
	codigo_afip			= null
	cai					= null
	importe_en_letras 	= globals.nro_a_letra(total);
	tipo 				= globals.zconf_tipo_mayorista

	// NUMERACION
    if (es_nro_manual == 0)   //no es manual
    { 
    	// BUSCAR NRO FACTURA de la sucursal/letra/tipo docum que corresponde
		var fs_nro_fc = databaseManager.getFoundSet(databaseManager.getDataSourceServerName(controller.getDataSource()),'numeracion_cl')
		fs_nro_fc.find()
		fs_nro_fc.sucursal			= sucursal
		fs_nro_fc.letra				= letra
		fs_nro_fc.cod_comprobante	= fac_cabecera_to_tipo_doc.cod_doc_asociado
		var found = fs_nro_fc.search()
		if (found != 1)
    	{
			globals.DIALOGS.showWarningDialog('Aviso','Factura: Sucursal o Letra o Tipo de comprobante incorrectos','OK')
	   		return false; 
    	}
    	else
    	{
		  	var nro_aux = fs_nro_fc.ultimo_numero + 1   // no cambiar hasta comprobar que no existe
		}
    }
    else // es manual 
    {
    	nro_aux = nro_factura;
    }
    //  VALIDAR si existe en fac_cabecera
	globals.fac_cabecera_duplicacion(letra,sucursal,nro_aux, tipo_doc)
	if (globals.fact_filas != 0)  // si es cero, la factura no existe
	{ // ya existe , lo rechaza
		globals.DIALOGS.showWarningDialog('Aviso','Ya existe ' + fac_cabecera_to_tipo_doc.descripcion + ' ' + letra + '-' + utils.numberFormat(sucursal,'0000') + '-' + utils.numberFormat(nro_aux,'00000000'),'OK')
		return false;
	}
	
	if (fTipo != null && fTipo != 0)
	{
		if (!globals.gAltaRemitoAutomatico(foundset.getRecord(foundset.getSelectedIndex()),fTipo))
		{
			return false
		}
	}
	
    if (es_nro_manual == 0)  
    {  //no es manual y no existe, asigna sig. numero
		fs_nro_fc.ultimo_numero = fs_nro_fc.ultimo_numero + 1
		nro_factura = fs_nro_fc.ultimo_numero // poner nro factura en la cabecera
    }
    
    if (ped_cabecera_id)
	{
		fac_cabecera_to_ped_cabecera.ped_estado = globals.zconf_ped_facturado
	}
	else
	{
		if (rem_cabecera_id)
		{
			fac_cabecera_to_rem_cabecera.rem_estado = globals.zconf_rem_facturado
		}
	}
    
	var $cant = fac_cabecera_to_fac_detalle.getSize()
	for (i = 1 ; i <= $cant ; i++)
	{
		$rcd = fac_cabecera_to_fac_detalle.getRecord(i)
		if ($rcd.rem_detalle_id)
		{
			$rcd.fac_detalle_to_rem_detalle.cantidad_pendiente_fac -= $rcd.cantidad_dec
		}
		if ($rcd.ped_detalle_id)
		{
			$rcd.fac_detalle_to_ped_detalle.cantidad_pendiente_entrega -= $rcd.cantidad_dec
		}
	}
	
    cod_mov_cc = tipo_doc
	// CTACTE  
	fac_cabecera_to_clientes.clientes_to_ctacte_cl.newRecord();
	fac_cabecera_to_clientes.clientes_to_ctacte_cl.cliente_id		= cliente_id;
	fac_cabecera_to_clientes.clientes_to_ctacte_cl.fecha_mov		= fecha
	fac_cabecera_to_clientes.clientes_to_ctacte_cl.nro_factura		= nro_factura
	fac_cabecera_to_clientes.clientes_to_ctacte_cl.cod_mov			= cod_mov_cc
	fac_cabecera_to_clientes.clientes_to_ctacte_cl.tipo_doc			= tipo_doc
	fac_cabecera_to_clientes.clientes_to_ctacte_cl.sucursal			= sucursal
	fac_cabecera_to_clientes.clientes_to_ctacte_cl.letra			= letra
	fac_cabecera_to_clientes.clientes_to_ctacte_cl.fecha_vto		= fecha_vencimiento
	fac_cabecera_to_clientes.clientes_to_ctacte_cl.provincia_id		= fac_cabecera_to_clientes.provincia_id
	fac_cabecera_to_clientes.clientes_to_ctacte_cl.cond_pago_id		= cond_pago_id
	fac_cabecera_to_clientes.clientes_to_ctacte_cl.importe			= total
	fac_cabecera_to_clientes.clientes_to_ctacte_cl.saldo			= total
	fac_cabecera_to_clientes.clientes_to_ctacte_cl.neto				= neto
	fac_cabecera_to_clientes.clientes_to_ctacte_cl.neto_2			= neto2
	fac_cabecera_to_clientes.clientes_to_ctacte_cl.neto_3			= neto3
	fac_cabecera_to_clientes.clientes_to_ctacte_cl.neto_no_gravado	= neto_no_gravado  
	fac_cabecera_to_clientes.clientes_to_ctacte_cl.iva_porc			= iva1_porc
	fac_cabecera_to_clientes.clientes_to_ctacte_cl.iva_2_porc		= iva2_porc
	fac_cabecera_to_clientes.clientes_to_ctacte_cl.iva_3_porc		= iva3_porc
	fac_cabecera_to_clientes.clientes_to_ctacte_cl.iva				= iva1_imp
	fac_cabecera_to_clientes.clientes_to_ctacte_cl.iva_2			= iva2_imp
	fac_cabecera_to_clientes.clientes_to_ctacte_cl.iva_3			= iva3_imp
	fac_cabecera_to_clientes.clientes_to_ctacte_cl.ib_percep		= ib_percep
	fac_cabecera_to_clientes.clientes_to_ctacte_cl.ib_percep_porc	= ib_percep_porc
	fac_cabecera_to_clientes.clientes_to_ctacte_cl.proyecto_id		= proyecto_id
	
	for (i = 0 ; i < $origenes[0].length ; i++)
	{
		var $origen = fac_cabecera_to_clientes.clientes_to_ctacte_cl.ctacte_cl_to_ctacte_cl_origen
		$origen.newRecord()
		$origen.cod_origen 		= $origenes[0][i]
		$origen.importe 		= $origenes[1][i]
		$origen.importe_signo 	= $origenes[1][i]
		if (fac_cabecera_to_clientes.clientes_to_ctacte_cl.ctacte_cl_to_tab_mov_cl_copia.d_h == 2)
		{
			$origen.importe_signo = $origen.importe_signo * (-1)
		}
	}
	
	// REGRABA Clientes
	fac_cabecera_to_clientes.fecha_ult_compra = fecha
	if (fac_cabecera_to_puntos_venta.tipo_factura == 1)
	{
		//FAC ELECTRONICA
		fac_estado = globals.zconf_fact_electronica
	}
	else
	{
		fac_estado = globals.zconf_fact_ingresada
	}
	
	// GRABAR TODO
	databaseManager.startTransaction()
	var estado = databaseManager.saveData()
	if (estado == true)
	{
		if (databaseManager.commitTransaction())
		{
			//  MENSAJE FINAL 
			var $msj = fac_cabecera_to_tipo_doc.descripcion + ' Mayorista ' + ' ' + letra + '-' + utils.numberFormat(sucursal,'0000') + '-' + utils.numberFormat(nro_factura,'00000000') + '\nGenerada correctamente'
			globals.DIALOGS.showInfoDialog('Aviso',  $msj,  "OK" );
			var $params = {
				pFacturaId 		: cabecera_id,
				pRazonSocial 	: usuarios_to_uservs.razon_social,
				pDireccion		: usuarios_to_uservs.calle_nro,
				pCodPostal		: usuarios_to_uservs.cod_postal,
				pCuit			: usuarios_to_uservs.cuit,
				pCodBrutos		: usuarios_to_uservs.cod_ing_brutos,
				pIva			: usuarios_to_uservs.uservs_to_tipo_iva.tipo_iva_desc,
				pActividad		: usuarios_to_uservs.actividad,
				pTelefono		: usuarios_to_uservs.telefono,
				pEmail			: usuarios_to_uservs.email,
				pInicioActividad : usuarios_to_uservs.inicio_actividad,
				pIconoURL		: usuarios_to_uservs.url_logo,
				pPie			: usuarios_to_uservs.pie_factura
			}
			globals.metodoJasper('impresion', 'ventas/factura.jasper', 'Factura_' + nro_factura, 'infocom', $params)
			iniciar()
		}
		else
		{
			databaseManager.rollbackTransaction()
			databaseManager.revertEditedRecords()
			globals.DIALOGS.showWarningDialog('Aviso','No pudo guardarse por un error en la base de datos','OK')
			iniciar()
		}
	}
	else
	{
		globals.DIALOGS.showWarningDialog('Aviso', fac_cabecera_to_tipo_doc.descripcion + ' Mayorista No fue generada - Revise los datos ingresados',  "OK")
		databaseManager.rollbackTransaction()
		iniciar()
	}
	return true
}

/**
 * @properties={typeid:24,uuid:"5B17D7E4-2C4D-4ABA-8472-E5D42122F33C"}
 */
function esconderErrores()
{
	elements.lbl_error_cliente.visible 			= false
	elements.lbl_error_cond_pago.visible 		= false
	elements.lbl_error_fecha.visible 			= false
	elements.lbl_error_total.visible 			= false
	elements.lbl_error_nro_factura.visible 		= false
	elements.lbl_error_concepto.visible			= false
	elements.lbl_error_proyecto.visible			= false
}

/**
 * @returns {Boolean} valid value
 *
 * @properties={typeid:24,uuid:"F946549C-288C-4485-B36A-19FA8C661972"}
 */
function ver_cond_iva_cliente() 
{
	if (globals.gTipo_iva_emisor == null)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Revise condición de iva del emisor','OK')
		return false;
	}
	letra = fac_cabecera_to_clientes.clientes_to_relacion_iva_letra.rel_iva_letra;
	if (letra == null) 
	{
		globals.DIALOGS.showWarningDialog('Aviso','Revise condición de iva en el cliente ','OK')
		return false;	
	}
	return true
}

/**
 * @returns {Boolean} valid value
 *
 * @properties={typeid:24,uuid:"55E9C81F-DF07-4BAB-9F34-FCA079710FEB"}
 */
function calculo_vto() 
{  
	if (fecha)
	{
		if (!cond_pago_id)
		{
			globals.DIALOGS.showWarningDialog('Aviso','Condición de pago no informada','OK')
			return false;
		}
		fecha_vencimiento = new Date (fecha.getFullYear(), fecha.getMonth(), fecha.getDate() + fac_cabecera_to_cond_pago.dias, 0,0,0,0);
		elements.lbl_error_fecha.visible = false
	}
	else
	{
		globals.DIALOGS.showWarningDialog('Aviso','Fecha del comprobante no informada','OK')
		elements.lbl_error_fecha.visible = true
		elements.fecha.requestFocus()
	}
	return true;
}

/**
 * @returns {Boolean} allow hide
 *
 * @properties={typeid:24,uuid:"BEA71AE3-3F37-483B-9306-2574E35B670A"}
 */
function salir_fac() 
{
	if (cliente_id != null)
	{
   		var resp = globals.DIALOGS.showQuestionDialog( 'Confirma',  '¿Seguro que desea salir?' ,  'Si', 'No')
		if (resp == 'Si')
		{
			databaseManager.revertEditedRecords();
			databaseManager.setAutoSave(true)
			return true;
		}
		else
			return false;
	}
	else
	{	
		databaseManager.revertEditedRecords();
		databaseManager.setAutoSave(true)
		return true;
	}
}

/**
 * @properties={typeid:24,uuid:"2ACC9540-BBA5-4053-9EF9-FBC4387AAF85"}
 */
function Cancelar() 
{
	databaseManager.revertEditedRecords();
	iniciar();
}

/**
 * @properties={typeid:24,uuid:"00782E45-F013-4468-B489-33C3B84B7F41"}
 */
function eliminar_renglon() 
{
	var found = fac_cabecera_to_fac_detalle.getSize()
	if (found==0)
	{
		globals.iva_del_producto=null;
		descuento=null
	    iva1_imp=null
	    iva1_porc=null
	    subtotal1=null
	    subtotal2=null
	    total=null
	}
	else
	{
	var resp = globals.DIALOGS.showQuestionDialog( 'Confirma',  '¿Seguro que desea dar de baja? ',  'Si', 'No')
	if (resp == 'Si')
	{
		fac_cabecera_to_fac_detalle.deleteRecord();
		
		totalizar(); // recalcula los totales
		found = fac_cabecera_to_fac_detalle.getSize();
		if (found==0)
		{
		globals.iva_del_producto=null;
		descuento=null;
	    iva1_imp=null;
	    iva1_porc=null;
	    subtotal1=null;
	    subtotal2=null;
	    total=null;
		}		
	}
	}
}

/**
 * @properties={typeid:24,uuid:"441A2AB0-9D88-420E-A559-BB36D0024813"}
 */
function agregar_renglon() 
{
	if (cliente_id != null)
	{
		forms.fac_mayo[elements.tabs_20.getTabRelationNameAt(elements.tabs_20.tabIndex)].newRecord(false);
		forms.fac_mayo_1.elements.fld_producto_id.requestFocus();
	}
	else
	{
		globals.DIALOGS.showWarningDialog('Aviso','Debe elegir cliente primero','OK')
	}	
}

/**
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"AE799AC8-4B5E-46B9-B855-0B38B83A9C97"}
 */
function ver_existe_ctacte() 
{
	if (es_nro_manual == 1)
	{
		// validar en fac_cabecera
		globals.fac_cabecera_duplicacion(letra,sucursal,nro_factura,tipo_doc)
		if (globals.fact_filas != 0)  // si es cero, la factura no existe
		{
			globals.DIALOGS.showWarningDialog('Aviso','Ya existe ' + fac_cabecera_to_tipo_doc.descripcion + ' ' + letra + '-' + utils.numberFormat(sucursal,'0000') + '-' + utils.numberFormat(nro_factura,'00000000'),'OK')
		}
	}
	return true
}

/**
 * Handle changed data.
 *
 * @param {Object} [oldValue] old value
 * @param {Object} [newValue] new value
 * @param {JSEvent} [event] the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"474CD723-EA04-41F8-99CA-026C48806F18"}
 */
function onDataChange_cliente_id(oldValue, newValue, event) 
{
	globals.gCliente = cliente_id;
	
	if (cliente_id)
	{
		ver_cond_iva_cliente();
		if (fac_cabecera_to_clientes.descuento)
			descuento_porc = fac_cabecera_to_clientes.descuento;
		if (fac_cabecera_to_clientes.cond_pago_id)
		{
			cond_pago_id = fac_cabecera_to_clientes.cond_pago_id;
			calculo_vto();
		}
		if (fac_cabecera_to_clientes.vendedor_id)
			vendedor_id = fac_cabecera_to_clientes.vendedor_id;       
		else 
			vendedor_id = globals.gvendedor;
			
		if (fac_cabecera_to_clientes.bloqueado == 1)
		{
			globals.DIALOGS.showWarningDialog('Aviso','Cliente bloqueado. NO se puede hacer factura','OK')
			cliente_id = 0
			return true
		}
		if (!validarCreditoCondPago()){
			cliente_id = 0
			return true
		}
			
		elements.lbl_error_cliente.visible = false
	}
	else
	{
		elements.lbl_error_cliente.visible = true
	}
	fac_cabecera_to_fac_det_valores.deleteAllRecords()
	if (fac_cabecera_to_fac_detalle.getSize() == 0)
		fac_cabecera_to_fac_detalle.newRecord()
	elements.tabs_20.tabIndex = 1
	forms.fac_mayo_1.elements.fld_producto_id.requestFocus()
	elements.fld_cond_pago.enabled = true
	return true
}

/**
 * @properties={typeid:24,uuid:"8A292647-20AF-4576-A910-D8C2A6B35C13"}
 */
function validarCreditoCondPago(){
	if ((fac_cabecera_to_clientes.credito_asignado == 0 || fac_cabecera_to_clientes.credito_asignado == null) && fac_cabecera_to_cond_pago.dias != 0)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Cliente con crédito en cero. Sólo puede facturar al Contado','OK')
		var $sql = 'SELECT cond_pago_id FROM cond_pago WHERE dias = 0 AND userv_id = ? ORDER BY descripcion'
		var $args = [globals.gUservID]
		var $ds = databaseManager.getDataSetByQuery('infocom',$sql,$args,1)
		if ($ds.getMaxRowIndex() != 1)
		{
			globals.DIALOGS.showWarningDialog('Aviso','No existe condición de pago al contado','OK')
			return false
		}
		cond_pago_id = $ds.getValue(1,1)
		return true
	}
	return true
}

/**
 * @properties={typeid:24,uuid:"88374DCA-EC29-4DA1-B461-EFEB8A021B1D"}
 */
function iniciar() 
{
	databaseManager.setAutoSave(false);
	controller.newRecord();
	descuento 		= 0;
	var $fecha 		= application.getServerTimeStamp();
	fecha 			= new Date( $fecha.getFullYear(), $fecha.getMonth(), $fecha.getDate(), 0,0,0,0)
	tipo_doc		= 1;  // sugiere factura (1 en tabla tipo_doc)
	cond_pago_id	= globals.zparam_cond_pago_default;
	flete			= 0;
	retira			= 1;
	entrega_fecha	= application.getServerTimeStamp();
	descuento_porc	= 0;
	vendedor_id		= globals.gvendedor;
	entrega_total	= 0;
	paga_con		= 0;
	fac_concepto_id	= globals.zparam_fact_concepto
	
	fTipo			= globals.zparam_facturacion_tipo_remito
	es_nro_manual	= 0

	globals.es_fc_exportacion 	= 0   // FC exportacion p/no extranjero= para Vagol no se usa-> se quita campo del form
	globals.gdeposito			= globals.zparam_deposito_default;
	globals.gtotal_valores		= 0;
	globals.gcumplimiento		= null;

	calculo_vto();
	
	elements.fld_nro_manual.visible = globals.zparam_fact_nro_manual
	esconderErrores()
	elements.boton_agregar.visible 	= true
	elements.boton_eliminar.visible = true
	forms.fac_envio.controller.readOnly = false
	elements.fld_cliente_id.requestFocus()
}

/**
 * @properties={typeid:24,uuid:"43E81D9D-83A5-4DF6-A443-1E4B51CFB2EF"}
 */
function alta_cliente() 
{
	databaseManager.revertEditedRecords()
	controller.loadRecords(null);
	
	globals.formEnVentana('clientes_alta','clientes_alta','Alta de Clientes')
	
	iniciar();
	if (globals.gClienteDesde != null)
	{
		cliente_id = globals.gClienteDesde //  global seteada en el form clientes_alta
		onDataChange_cliente_id();
	}
}

/**
 * @properties={typeid:24,uuid:"A471DCE5-69F8-4707-9BB8-DD3369D63069"}
 */
function totalizar() 
{
	// SUMA RENGLONES
	iva1_imp 		= 0
	iva2_imp 		= 0
	iva3_imp 		= 0
	iva1_porc 		= null
	iva2_porc 		= null
	iva3_porc 		= null
	neto			= 0
	neto2			= 0
	neto3			= 0
	neto_no_gravado = 0
	
	var $tot_iva	= 0
	var $subtotal1 	= 0
	var $cant 		= fac_cabecera_to_fac_detalle.getSize()
	for ( var i = 1 ; i <= $cant ; i++ )
	{
		/** @type {JSRecord<db:/infocom/fac_detalle>} */
		var $rcd = fac_cabecera_to_fac_detalle.getRecord(i)
		if ($rcd.producto_id)
		{
			if ($rcd.fac_detalle_to_productos.tipo_descripcion != 2)
			{
				$rcd.msj_error = ''
				if (!$rcd.cantidad_dec)
				{
					$rcd.msj_error = '-Cantidad '
				}
				if (!$rcd.precio_unitario)
				{
					$rcd.msj_error += '-P Unit.'
				}
				var $total_r = $rcd.precio_unitario * $rcd.cantidad_dec - $rcd.descuento_importe
				$subtotal1 	+= $total_r
				if ($rcd.fac_detalle_to_productos.grava_iva == 1)
				{
					var $iva	= utils.stringToNumber(utils.numberFormat($total_r * $rcd.iva_porc / 100, 2))
					agregaIva($rcd.iva_porc, $iva, $total_r)
					$tot_iva += $iva
				}
				else
				{
					neto_no_gravado += $total_r
				}
			}
		}
	}
	subtotal1 		= $subtotal1
	descuento 		= utils.stringToNumber(utils.numberFormat($subtotal1 * descuento_porc / 100, 2))
	subtotal2 		= $subtotal1 - descuento
	neto 			= utils.stringToNumber(utils.numberFormat(neto * (1 - descuento_porc / 100), 2))
	neto2 			= utils.stringToNumber(utils.numberFormat(neto2 * (1 - descuento_porc / 100), 2))
	neto3 			= utils.stringToNumber(utils.numberFormat(neto3 * (1 - descuento_porc / 100), 2))
	
	iva1_imp	= utils.stringToNumber(utils.numberFormat(iva1_imp * (1 - descuento_porc / 100), 2))
	iva2_imp 	= utils.stringToNumber(utils.numberFormat(iva2_imp * (1 - descuento_porc / 100), 2))
	iva3_imp 	= utils.stringToNumber(utils.numberFormat(iva3_imp * (1 - descuento_porc / 100), 2))
	$tot_iva	= iva1_imp + iva2_imp + iva3_imp
	
	neto_no_gravado	= utils.stringToNumber(utils.numberFormat(neto_no_gravado * (1 - descuento_porc / 100), 2))	
	if (flete == 1)
	{
		subtotal2 += flete_importe
		var $iva_flete = utils.stringToNumber(utils.numberFormat(flete_importe * (globals.zparam_flete_iva_porc / 100), 2))	
		$tot_iva += $iva_flete
		agregaIva(globals.zparam_flete_iva_porc,$iva_flete,flete_importe)
	}

	var $ib_percep = 0
	if (fac_cabecera_to_clientes.percep_ib && fac_cabecera_to_clientes.exento_ing_brutos != 1)
	{
		ib_percep 		= utils.stringToNumber(utils.numberFormat((neto + neto2 + neto3 + neto_no_gravado) * fac_cabecera_to_clientes.percep_ib / 100, 2))
		ib_percep_porc 	= fac_cabecera_to_clientes.percep_ib
		$ib_percep		= ib_percep
	}
	
	if (forms.fac_mayo.fac_cabecera_to_clientes.clientes_to_relacion_iva_letra.rel_iva_calcula != 1)
	{ //para exportacion
		total = subtotal2
	}
	else
	{ 
		total = subtotal2 + $tot_iva
	}
	total += $ib_percep
	
	if (total == 0)
	{
		elements.lbl_error_total.visible = true
	}
	else
	{
		elements.lbl_error_total.visible = false
	}
}

/**
 * Handle changed data.
 *
 * @param {Number} oldValue old value
 * @param {Number} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"A88B652E-4014-4EB4-A3CA-299474597F8D"}
 */
function onDataChangeNroManual(oldValue, newValue, event) {
	elements.fld_nro_factura.editable = newValue
	elements.fld_nro_factura.requestFocus()
	return true
}

/**
 * @param {Number} porcentaje
 * @param {Number} iva_importe
 * @param {Number} importe_neto
 * 
 * @properties={typeid:24,uuid:"6915FDD8-BE61-4F63-821D-9C16E383A53E"}
 */
function agregaIva(porcentaje, iva_importe, importe_neto)
{
	if (iva1_porc == null)
	{
		iva1_porc 	= porcentaje
		iva1_imp 	= iva_importe.toFixed(2) * 1
		neto		= importe_neto.toFixed(2) * 1
	}
	else
	{
		if (porcentaje != iva1_porc)
		{
			if (iva2_porc == null)
			{
				iva2_porc 	= porcentaje
				iva2_imp 	= iva_importe.toFixed(2) * 1
				neto2		= importe_neto.toFixed(2) * 1
			}
			else
			{
				if (porcentaje != iva2_porc)
				{
					iva3_porc 	= porcentaje
					iva3_imp 	+= iva_importe.toFixed(2) * 1
					neto3		+= importe_neto.toFixed(2) * 1
				}
				else
				{
					iva2_porc 	= porcentaje
					iva2_imp 	+= iva_importe.toFixed(2) * 1
					neto2		+= importe_neto.toFixed(2) * 1
				}
			}
		}
		else
		{
			iva1_porc 	= porcentaje
			iva1_imp 	+= iva_importe.toFixed(2) * 1
			neto		+= importe_neto.toFixed(2) * 1
		}
	}
}

/**
 * Callback method when the user changes tab in a tab panel or divider position in split pane.
 *
 * @param {Number} previousIndex index of tab shown before the change
 * @param {JSEvent} event the event that triggered the action
 *
 * @properties={typeid:24,uuid:"72A3180F-70C9-4560-81D1-3FAC7B46EE29"}
 */
function onTabChange(previousIndex, event) {
	if(elements.tabs_20.tabIndex == 2)
	{
		elements.boton_agregar.visible = false
		elements.boton_eliminar.visible = false
	}
	else
	{
		elements.boton_agregar.visible = true
		elements.boton_eliminar.visible = true
	}
}

/**
 * Perform the element default action.
 *
 * @param {JSEvent} event the event that triggered the action
 *
 * @properties={typeid:24,uuid:"EAC7C960-D782-4A24-BB95-DA01484D17EB"}
 */
function buscarRemitos(event) {
	if (cliente_id == null)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Debe elegir cliente antes de buscar','OK')
		return;
	}
	
	globals.formEnVentana('fac_remitos_cab','buscar_remitos','Remitos')

	if (rem_cabecera_id)
	{
		totalizar()
		elements.boton_agregar.visible 	= false
		elements.boton_eliminar.visible = false
		forms.fac_envio.controller.readOnly = true
	}
}

/**
 * Perform the element default action.
 *
 * @param {JSEvent} event the event that triggered the action
 *
 * @properties={typeid:24,uuid:"A7E583B8-3B5E-4E83-B1A5-7840AE3162BB"}
 */
function buscarPedidos(event) {
	if (cliente_id == null)
	{
		globals.DIALOGS.showWarningDialog('Aviso','Debe elegir cliente antes de buscar','OK')
		return;
	}
	
	globals.formEnVentana('fac_pedidos_cab','buscar_pedidos','Pedidos')

	totalizar()
	if (!rem_cabecera_id)
	{
		elements.boton_agregar.visible 	= true
		elements.boton_eliminar.visible = true
		elements.tabs_20.enabled 		= true
	}
}

/**
 * Handle changed data.
 *
 * @param {Number} oldValue old value
 * @param {Number} newValue new value
 * @param {JSEvent} event the event that triggered the action
 *
 * @returns {Boolean}
 *
 * @properties={typeid:24,uuid:"04621355-01C6-4669-8DFD-C3F838FF6B6E"}
 */
function onDataChangeCondPago(oldValue, newValue, event) {
	if (!validarCreditoCondPago()){
		cliente_id = 0
		return true
	}
	calculo_vto();
	return true
}
